#ifndef BTL_UTILITY_EIGENSUPPORT
#define BTL_UTILITY_EIGENSUPPORT

#include <Eigen/Dense>

namespace btl
{
namespace utility
{

template <class T>
Eigen::Matrix<T, 2, 1> vec(const T& a, const T& b);

template <class T>
Eigen::Matrix<T, 3, 1> vec(const T& a, const T& b, const T& c);

template <class T>
Eigen::Matrix<T, 4, 1> vec(const T& a, const T& b, const T& c, const T& d);

}
}

namespace btl
{
using utility::vec;
}

// ====================================================================
// === Implementation

namespace btl
{
namespace utility
{

template <class T>
inline Eigen::Matrix<T, 2, 1> vec(const T& a, const T& b)
{
   Eigen::Matrix<T, 2, 1> v;
   v << a, b;
   return v;
}

template <class T>
inline Eigen::Matrix<T, 3, 1> vec(const T& a, const T& b, const T& c)
{
   Eigen::Matrix<T, 3, 1> v;
   v << a, b, c;
   return v;
}

template <class T>
inline Eigen::Matrix<T, 4, 1> vec(const T& a, const T& b, const T& c, const T& d)
{
   Eigen::Matrix<T, 4, 1> v;
   v << a, b, c, d;
   return v;
}

}
}

#endif
